/**
|--------------------------------------------------------------
| Factura.java
|--------------------------------------------------------------
| @Autor: David Ccapa Gil
| @Fecha de creacion: 01/10/2012
| @Fecha de la ultima modificacion: 01/10/2012
| @Universidad Peruana de Ciencias Aplicadas
|--------------------------------------------------------------
*/
package appbenedictoxvi;

import java.util.ArrayList;

/**
 *
 * @author David
 */
public class Factura {
    private int idnrofactura;
    private Cliente cliente;
    private String fechaemision;
    private String empresa;
    private String fechavencimiento;
    private String fechapago;
    private String estado;
    private String observacion;
    private String moneda;
    private ArrayList<DetalleFactura> items;

    public Factura(int idnrofactura, Cliente cliente, String fechaemision, String empresa, String fechavencimiento, String fechapago, String estado, String observacion, String moneda) {
        this.idnrofactura = idnrofactura;
        this.cliente = cliente;
        this.fechaemision = fechaemision;
        this.empresa = empresa;
        this.fechavencimiento = fechavencimiento;
        this.fechapago = fechapago;
        this.estado = estado;
        this.observacion = observacion;
        this.moneda = moneda;
        //Crear la coleccion de detalles de factura
        items = new ArrayList<DetalleFactura>();
    }

    /**
     * @return the idnrofactura
     */
    public int getIdnrofactura() {
        return idnrofactura;
    }

    /**
     * @param idnrofactura the idnrofactura to set
     */
    public void setIdnrofactura(int idnrofactura) {
        this.idnrofactura = idnrofactura;
    }

    /**
     * @return the cliente
     */
    public Cliente getCliente() {
        return cliente;
    }

    /**
     * @param cliente the cliente to set
     */
    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    /**
     * @return the fechaemision
     */
    public String getFechaemision() {
        return fechaemision;
    }

    /**
     * @param fechaemision the fechaemision to set
     */
    public void setFechaemision(String fechaemision) {
        this.fechaemision = fechaemision;
    }

    /**
     * @return the empresa
     */
    public String getEmpresa() {
        return empresa;
    }

    /**
     * @param empresa the empresa to set
     */
    public void setEmpresa(String empresa) {
        this.empresa = empresa;
    }

    /**
     * @return the fechavencimiento
     */
    public String getFechavencimiento() {
        return fechavencimiento;
    }

    /**
     * @param fechavencimiento the fechavencimiento to set
     */
    public void setFechavencimiento(String fechavencimiento) {
        this.fechavencimiento = fechavencimiento;
    }

    /**
     * @return the fechapago
     */
    public String getFechapago() {
        return fechapago;
    }

    /**
     * @param fechapago the fechapago to set
     */
    public void setFechapago(String fechapago) {
        this.fechapago = fechapago;
    }

    /**
     * @return the estado
     */
    public String getEstado() {
        return estado;
    }

    /**
     * @param estado the estado to set
     */
    public void setEstado(String estado) {
        this.estado = estado;
    }

    /**
     * @return the observacion
     */
    public String getObservacion() {
        return observacion;
    }

    /**
     * @param observacion the observacion to set
     */
    public void setObservacion(String observacion) {
        this.observacion = observacion;
    }

    /**
     * @return the moneda
     */
    public String getMoneda() {
        return moneda;
    }

    /**
     * @param moneda the moneda to set
     */
    public void setMoneda(String moneda) {
        this.moneda = moneda;
    }

    //Adicionar Items
    public void adicionarItem(int cantidad, Servicio servicio){
        // Crea el nuevo detalle
        DetalleFactura nuevoDetalle = new DetalleFactura(cantidad, servicio);
        // Guardar el detalle en la coleccion de detalles
        items.add(nuevoDetalle);
    }

    //Calcula Nro. de Items
    public int getNumeroItems(){
        return items.size();
    }

    //Calcular Total Venta
    public double calcularTotalVenta(){
        double totalVenta;
        totalVenta = 0;

        for (DetalleFactura detalleFactura : items) {
            totalVenta += detalleFactura.CalcularSubTotal();
            //System.out.println(totalVenta);
        }

        return totalVenta;
    }

    //Calcular IGV
    public double calcularIgv(){
        double igv = 0.18;
        double totalIgv;
        totalIgv = 0;

        totalIgv = this.calcularTotalVenta() * igv;
        //System.out.println(totalIgv);

        return totalIgv;
    } 

    //Calcular Total a Pagar
    public double calcularTotalPagar(){
        double totalVenta;
        totalVenta = 0;

        totalVenta = this.calcularTotalVenta() + this.calcularIgv();
        
        return totalVenta;
    }


}
